package com.styletransfer.controller;

import com.styletransfer.model.Album;
import com.styletransfer.model.ApiResponse;
import com.styletransfer.model.PageRequest;
import com.styletransfer.model.PageResponse;
import com.styletransfer.service.AlbumService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 专辑控制器
 *
 * 处理专辑相关的HTTP请求
 */
@RestController
@RequestMapping("/album")
public class AlbumController {

    @Autowired
    private AlbumService albumService;

    /**
     * 保存专辑
     *
     * @param requestMap 请求参数
     * @return API响应
     */
    @PostMapping("/save")
    public ApiResponse<?> saveAlbum(@RequestBody Map<String, Object> requestMap) {
        try {
            // 从请求参数中提取数据
            Album album = new Album();

            // 设置专辑标题和描述
            if (requestMap.containsKey("title")) {
                album.setTitle((String) requestMap.get("title"));
            }

            if (requestMap.containsKey("description")) {
                album.setDescription((String) requestMap.get("description"));
            }

            // 设置是否公开
            if (requestMap.containsKey("isPublic")) {
                album.setIsPublic((Integer) requestMap.get("isPublic"));
            } else {
                album.setIsPublic(1); // 默认公开
            }

            // 获取图片URL列表
            @SuppressWarnings("unchecked")
            List<String> imageUrls = (List<String>) requestMap.get("imageUrls");

            if (imageUrls == null || imageUrls.isEmpty()) {
                return ApiResponse.error("图片列表不能为空");
            }

            // 创建专辑
            return albumService.createAlbum(album, imageUrls);
        } catch (Exception e) {
            return ApiResponse.error("保存专辑失败: " + e.getMessage());
        }
    }

    /**
     * 获取专辑详情
     *
     * @param id 专辑ID
     * @return API响应
     */
    @GetMapping("/{id}")
    public ApiResponse<?> getAlbumDetail(@PathVariable Long id) {
        try {
            return albumService.findById(id);
        } catch (Exception e) {
            return ApiResponse.error("获取专辑详情失败: " + e.getMessage());
        }
    }

    /**
     * 获取用户专辑列表
     *
     * @param page 页码
     * @param size 每页数量
     * @return API响应
     */
    @GetMapping("/user")
    public ApiResponse<?> getUserAlbums(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size) {
        try {
            PageRequest pageRequest = new PageRequest(page, size);
            return albumService.findByUserPage(null, pageRequest); // null表示当前登录用户
        } catch (Exception e) {
            return ApiResponse.error("获取用户专辑列表失败: " + e.getMessage());
        }
    }

    /**
     * 获取公开专辑列表
     *
     * @param page 页码
     * @param size 每页数量
     * @return API响应
     */
    @GetMapping("/public")
    public ApiResponse<?> getPublicAlbums(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size) {
        try {
            PageRequest pageRequest = new PageRequest(page, size);
            return albumService.findPublicPage(pageRequest);
        } catch (Exception e) {
            return ApiResponse.error("获取公开专辑列表失败: " + e.getMessage());
        }
    }

    /**
     * 更新专辑
     *
     * @param id 专辑ID
     * @param album 专辑对象
     * @return API响应
     */
    @PutMapping("/{id}")
    public ApiResponse<?> updateAlbum(@PathVariable Long id, @RequestBody Album album) {
        try {
            album.setId(id);
            return albumService.updateAlbum(album);
        } catch (Exception e) {
            return ApiResponse.error("更新专辑失败: " + e.getMessage());
        }
    }

    /**
     * 删除专辑
     *
     * @param id 专辑ID
     * @return API响应
     */
    @DeleteMapping("/{id}")
    public ApiResponse<?> deleteAlbum(@PathVariable Long id) {
        try {
            return albumService.deleteAlbum(id);
        } catch (Exception e) {
            return ApiResponse.error("删除专辑失败: " + e.getMessage());
        }
    }
}
